package gov.mmgt.netmanager.dao;

import gov.mmgt.netmanager.common.exception.MyException;
import gov.mmgt.netmanager.models.Account;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

public class AccountDao {
	private EntityManager getEntityManager() {
		return EntityManagerHelper.getEntityManager();
	}
	
	/**
	 * 
	 * 方法概述：根据ID获取用户信息
	 * 描述：根据ID获取用户信息
	 * @param id
	 * @return
	 * @throws MyException
	 * 返回类型：List<Account>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-18
	 */
	@SuppressWarnings("unchecked")
	public List<Account> findById(int id) throws Exception {
		StringBuffer hql = new StringBuffer();
		
		hql.append("SELECT entity ");
		hql.append("FROM Account entity ");
		hql.append("WHERE 1 = 1 ");
		hql.append("AND entity.id = :id ");
		
		Query query = getEntityManager().createQuery(hql.toString());
		
		query.setParameter("id", id);
		
		return query.getResultList();
	}
	
	/**
	 * 
	 * 方法概述：获取所有用户数据
	 * 描述：获取所有用户数据
	 * @return
	 * @throws Exception
	 * 返回类型：List<Account>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-18
	 */
	@SuppressWarnings("unchecked")
	public List<Account> findAll() throws Exception {
		StringBuffer hql = new StringBuffer();
		
		hql.append("SELECT entity ");
		hql.append("FROM Account entity ");
		hql.append("WHERE 1 = 1 ");
		
		Query query = getEntityManager().createQuery(hql.toString());
		
		return query.getResultList();
	}
	
	/**
	 * 
	 * 方法概述：根据账户查询用户数据
	 * 描述：根据账户查询用户数据
	 * @param account
	 * @return
	 * 返回类型：List<Account>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-19
	 */
	@SuppressWarnings("unchecked")
	public List<Account> findByAccount(String account) throws Exception {
		StringBuffer hql = new StringBuffer();
		
		hql.append("SELECT entity ");
		hql.append("FROM Account entity ");
		hql.append("WHERE 1 = 1 ");
		hql.append("AND entity.account = :account ");
		
		Query query = getEntityManager().createQuery(hql.toString());
		
		query.setParameter("account", account);
		
		return query.getResultList();
	}
	
	/**
	 * 
	 * 方法概述：修改用户数据
	 * 描述：修改用户数据
	 * @param account
	 * @return
	 * 返回类型：Account
	 * 修改人：梁铭显 
	 * 修改时间：2014-5-26
	 */
	public Account update(Account account) throws Exception {
		getEntityManager().getTransaction().begin();
		Account result = getEntityManager().merge(account);
		getEntityManager().getTransaction().commit();
		return result;
	}
}
